home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 1 / Cream of the Crop 1.iso / PROGRAM / NTUMIN10.ARJ / CPT.C < prev    next >
C/C++ Source or Header  |  1992-03-12  |  3KB  |  87 lines

  1. /****************************************************************************
  2.  *
  3.  *    Program Name : CPT.C
  4.  *
  5.  *    Written By : Eng-Huat Ong and Kian-Mong Low.
  6.  *
  7.  *    This program generates the Candidate Product Term (CPT) given an
  8.  *    array of minterm plus its adjacent minterms.
  9.  *
  10.  *    Returns    pointer to an array of a single CPT (a cube in ASCII)
  11.  *
  12.  * --------------------------------------------------------------------------
  13.  *    Copyright (c) 1992. All Rights Reserved. Nanyang Technological
  14.  *    University.
  15.  *
  16.  *    You are free to use, copy and distribute this software and its
  17.  *    documentation providing that:
  18.  *
  19.  *        NO FEE IS CHARGED FOR USE, COPYING OR DISTRIBUTION.
  20.  *
  21.  *        IT IS NOT MODIFIED IN ANY WAY.
  22.  *
  23.  *        THE COPYRIGHT NOTICE APPEAR IN ALL COPIES.
  24.  *
  25.  *    This program is provided "AS IS" without any warranty, expressed or
  26.  *    implied, including but not limited to fitness for any particular
  27.  *    purpose.
  28.  *
  29.  *    If you find NTUMIN fast, easy, and useful, a note or comment would be
  30.  *    appreciated. Please send to:
  31.  *
  32.  *        Boon-Tiong Tan or Othman Bin Ahmad
  33.  *        School of EEE
  34.  *        Nanyang Technological University
  35.  *        Nanyang Avenue
  36.  *        Singapore 2263
  37.  *        Republic of Singapore
  38.  *
  39.  ***************************************************************************/
  40.  
  41. #include <stdio.h>
  42. #include <stdlib.h>
  43.  
  44. unsigned char   *cpt(c)
  45. unsigned char   *c;
  46.  
  47. {
  48.    unsigned char     n, bit1, bit2, nspm, adj, *d, i, j;
  49.  
  50.    n    = *c;                                    /* no. of variables */
  51.    adj  = *(c+1);                                /* no. of adjacent terms */
  52.    nspm = *(c+3);                             /* no. of bytes/minterm */
  53.  
  54.    d = (unsigned char *) malloc(n+1);         /* space for CPT */
  55.    if (d == 0)
  56.       {
  57.      printf("Out of memory -- CPT, *d\n");
  58.      printf("Program terminated - 1\n");
  59.      exit(0);
  60.       }
  61.  
  62.    for (i=0; i<n; i++)                        /* do for no. of variables */
  63.       {
  64.      bit1 = *(c+4+(i/8)) & (1<<(i%8));    /* the minterm */
  65.  
  66.      for (j=1; j<=adj; j++)               /* no. of adj terms */
  67.         {
  68.            bit2 = *(c+4+j*nspm+(i/8)) & (1<<(i%8));   /* adj terms */
  69.            if (bit2 != bit1)              /* column with both 0's and 1's */
  70.           {
  71.              *(d+i) = 'X';            /* CPT's position contains X */
  72.              break;
  73.           }
  74.         }
  75.  
  76.      if (bit2==bit1 || adj==0)            /* column with only 0's or 1's */
  77.         {
  78.            if (bit1 == 0)                 /* column with only 0's */
  79.           *(d+i) = '0';               /* CPT's position contains 0 */
  80.            else                           /* column with only 1's */
  81.           *(d+i) = '1';               /* CPT's position contains 1 */
  82.         }
  83.       }
  84.    *(d+n) = '\0';                             /* terminating null string */
  85.  
  86.    return(d);                                 /* return CPT */
  87. }